package db;

import java.util.Date;
import java.util.List;

import domain.Club;
import domain.User;
import web.PaginationSupport;

/**
 * 用户资源库接口
 */
public interface UserRepository {

    /**
     * 获取用户的总数
     * @return 用户的数量
     */
    long count();

    /**
     * 获取特定社团中用户的总数
     * @param clubID    社团ID
     * @return  社团中用户的数量
     */
    long countByClubID(int clubID);

    /**
     * 创建一个新的用户
     * @param user 新用户的信息
     * @return 新创建的用户
     */
    User save(User user);

    /**
     * 根据ID查找用户
     * @param userId 用户的ID
     * @return 对应ID的用户
     */
    User findOne(int userId);

    /**
     * 根据用户名查找用户
     * @param userName 用户名
     * @return 对应用户名的用户
     */
    User findByUserName(String userName);

    /**
     * 根据用户名和密码查找用户
     * @param userName 用户名
     * @param password 密码
     * @return 对应用户名和密码的用户
     */
    User findByUserName(String userName, String password);

    /**
     * 更新用户信息
     *
     * @param user 用户
     * @return 更新后的用户
     */
    User update(User user);

    /**
     * 更新用户的密码
     * @param username 用户名
     * @param password 新密码
     * @param email 邮箱
     * @param nickname 昵称
     * @param telephone 电话号码
     * @return 是否更新成功
     */
    boolean updatePasswd(String username, String password, String email, String nickname,String telephone);

    /**
     * 分页查找用户
     * @param pageNo 页码
     * @param pageSize 每页的数量
     * @return 分页的用户列表
     */
    PaginationSupport<User> findPage(int pageNo, int pageSize);

    /**
     * 删除用户
     * @param username 用户名
     * @return 是否删除成功
     */
    boolean deleteUserByUsername(String username);

    /**
     * 删除用户
     * @param userID  用户ID
     * @return 是否删除成功
     */
    boolean deleteUserByUserID(int userID);

    /**
     * 根据clubID和username查找用户
     * @param clubID
     * @param username
     * @return 返回所有符合的user
     */
    List<User> findUsersByClubIDAndUserName(int clubID,String username);

    /**
     * 根据club查找用户
     * @param club  社团
     * @return  社团中的用户
     */
    List<User> findUsersByClub(Club club);

    /**
     * 获取所有用户
     * @return 所有用户的列表
     */
    List<User> findAll();

    /**
     * 判断用户是否参加某一活动
     * @param userID    用户ID
     * @param activityID    活动ID
     * @return  是否参加活动
     */
    boolean isParticipant(int userID,int activityID);

}
